1
2 using
System;
3 using
System.Collections.Generic;
4 using
System.ComponentModel;
5 using
System.Data;
6 using
System.Drawing;
7 using
System.Text;
8 using
System.Windows.Forms;
9 using
System.Collections;
10
11
12 namespace
VietGraph
13 {
14     
public partial class Main : Form
15     {
16         Graph form;
17         Color[] colorLevels = { Color.Red, Color.Green, Color.Blue,
18             Color.Purple, Color.Brown, Color.Orange, Color.Chocolate,
19             Color.Maroon, Color.Navy, Color.YellowGreen };
20         
string[] strFunctions ={ "abs", "sin", "cos", "tan", "sec", "cosec", "cot", "arcsin",
21             
"arccos", "arctan", "exp", "ln", "log", "antilog", "sqrt", "sinh", "cosh", "tanh",
22             
"arcsinh", "arccosh", "arctanh" };
23
24         
public Main()
25         {
26             InitializeComponent();
27         }
28
29         
#region Event Handlers
30         
private void Form1_Load(object sender, EventArgs e)
31         {
32             
this.mode.SelectedIndex = 0;
33             
this.sensitivity.Enabled = false;
34
35             
this.lstExpressions.Items.Add("x");
36             
this.lstExpressions.Items.Add("-x");
37             
this.lstExpressions.Items.Add("x-3");
38             
this.lstExpressions.Items.Add("-x-3");
39             
this.lstExpressions.Items.Add("x+3");
40             
this.lstExpressions.Items.Add("3-x");
41             
//this.lstExpressions.Items.Add("5*(sin(x)+sin(3*x)/3+sin(5*x)/5+sin(7*x)/7+sin(9*x)/9+sin(11*x)/11+sin(13*x)/13)");
42         }
43
44         
private void txtExpression_TextChanged(object sender, EventArgs e)
45         {
46             
int cursorPosition = this.txtExpression.SelectionStart;
47             WriteText(
this.txtExpression.Text);
48             
this.txtExpression.SelectionStart = cursorPosition;
49         }
50
51         
private void btnAdd_Click(object sender, EventArgs e)
52         {
53             
this.CheckDuplication();
54         }
55
56         
private bool CheckDuplication()
57         {
58             
for (int i = 0; i < lstExpressions.Items.Count; i++)
59             {
60                 
if (txtExpression.Text == lstExpressions.Items[i].ToString())
61                 {
62                     MessageBox.Show(
"Đã có biểu thức này trong danh sách rồi.");
63                     
return false;
64                 }
65             }
66
67             AddExpression();
68             
this.lstExpressions.SelectedIndex = -1;
69             
this.lstExpressions.Refresh();
70             
return true;
71         }
72
73         
private void btnClear_Click(object sender, EventArgs e)
74         {
75             
this.lstExpressions.Items.Clear();
76         }
77
78         
private void btnRemove_Click(object sender, EventArgs e)
79         {
80             
int index = this.lstExpressions.SelectedIndex;
81             
this.lstExpressions.Items.Remove(this.lstExpressions.SelectedItem);
82             
if (index == this.lstExpressions.Items.Count)
83                 index--;
84             
if (index != -1)
85                 
this.lstExpressions.SelectedIndex = index;
86         }
87
88         
private void cmdPlotGraph_Click(object sender, EventArgs e)
89         {
90             
if (mode.Text == "Cartesian")
91             {
92                 ExpressionHelper.Cartesian =
true;
93                 ExpressionHelper.Polar =
false;
94             }
95             
else
96             {
97                 ExpressionHelper.Polar =
true;
98                 ExpressionHelper.Cartesian =
false;
99             }
100
101             ExpressionHelper.XStartValue = Convert.ToDouble(startX.Value);
102             ExpressionHelper.XEndValue = Convert.ToDouble(endX.Value);
103
104             
if (form == null || form.IsDisposed)
105             {
106                 form =
new Graph();
107                 form.Show();
108             }
109
110             form.SetRange((Double)startX.Value, (Double)endX.Value, (Double)startY.Value, (Double)endY.Value);
111             form.SetDivisions((
int)this.divX.Value, (int)this.divY.Value);
112             form.SetPenWidth((
int)this.penWidth.Value);
113
114             
if (this.mode.SelectedItem.ToString() == "Polar")
115                 form.SetMode(GraphMode.Polar, (
int)this.sensitivity.Value);
116             
else
117                 form.SetMode(GraphMode.Rectangular,
50);
118
119             
//form.RemoveAllExpressions();
120             ExpressionHelper.ArrExpression.Clear();
121             
for (int i = 0; i < lstExpressions.Items.Count; i++)
122             {
123                 form.AddExpression((
string)lstExpressions.Items[i], colorLevels[i % colorLevels.Length]);
124                 
//Add expression to Array Expression (ThemBotBieuThuc form)
125                 ExpressionHelper.ArrExpression.Add(lstExpressions.Items[i]);
126             }
127
128             form.Refresh();
129             form.Activate();
130         }
131
132         
private void mode_SelectedIndexChanged(object sender, EventArgs e)
133         {
134             
if (this.mode.SelectedIndex == 1)
135                 
this.sensitivity.Enabled = true;
136             
else
137                 
this.sensitivity.Enabled = false;
138         }
139
140         
private void txtExpression_KeyPress(object sender, KeyPressEventArgs e)
141         {
142             
if (e.KeyChar == 13 && txtExpression.Text.Length > 0)
143                 AddExpression();
144
145             
//if a letter is found
146             
if (char.IsLetter(e.KeyChar))
147             {
148                 
int cursorPos = this.txtExpression.SelectionStart;
149                 
if (cursorPos > 0)
150                 {
151                     
//if the previous char is a digit, add a *
152                     
if (char.IsDigit(this.txtExpression.Text[cursorPos - 1]))
153                     {
154                         
this.txtExpression.Text = this.txtExpression.Text.Insert(cursorPos, "*" + e.KeyChar);
155                         cursorPos +=
2;
156                         
this.txtExpression.SelectionStart = cursorPos;
157                         e.Handled =
true;
158                     }
159                     
//if a function is formed, add a "("
160                     
else
161                     {
162                         
string text = string.Empty;
163                         
int i = cursorPos - 1;
164                         
while (i >= 0)
165                         {
166                             
if (!char.IsLetter(this.txtExpression.Text[i]))
167                                 
break;
168                             i--;
169                         }
170                         i++;
171                         
//now i is the index where last text is started
172                         
if (i < cursorPos)
173                             text =
this.txtExpression.Text.Substring(i, cursorPos - i) + e.KeyChar;
174                         
if (IsFunction(text))
175                         {
176                             
this.txtExpression.Text = this.txtExpression.Text.Insert(cursorPos, e.KeyChar.ToString() + "(");
177                             cursorPos +=
2;
178                             
this.txtExpression.SelectionStart = cursorPos;
179                             e.Handled =
true;
180                         }
181                     }
182                 }
183             }
184         }
185
186         
private void lstExpressions_SelectedIndexChanged(object sender, EventArgs e)
187         {
188             
if (this.lstExpressions.SelectedIndex != -1)
189                 
this.txtExpression.Text = this.lstExpressions.Items[this.lstExpressions.SelectedIndex].ToString();
190         }
191
192         
#endregion
193
194         
#region Helper Functions
195         
//this functions handles coloring of expressions
196         
private void WriteText(string text)
197         {
198             
int colorIndex = 0;
199             
this.txtExpression.Text = "";
200             
for (int i = 0; i < text.Length; i++)
201             {
202                 
if (text[i] == '(')
203                 {
204                     colorIndex++;
205                     
if (colorIndex == colorLevels.Length)
206                         colorIndex =
0;
207                     txtExpression.SelectionColor = colorLevels[colorIndex];
208                 }
209
210                 
this.txtExpression.AppendText(text[i].ToString());
211
212                 
if (text[i] == ')')
213                 {
214                     colorIndex--;
215                     
if (colorIndex < 0)
216                         colorIndex = colorLevels.Length -
1;
217                     txtExpression.SelectionColor = colorLevels[colorIndex];
218                 }
219             }
220         }
221
222         
private bool IsFunction(string text)
223         {
224             
for (int i = 0; i < strFunctions.Length; i++)
225                 
if (string.Compare(text, strFunctions[i], true) == 0)
226                     
return true;
227             
return false;
228         }
229
230         
private void AddExpression()
231         {
232             
if (this.txtExpression.Text.Length == 0)
233                 
return;
234             
this.txtExpression.Text = CompleteParenthesis(this.txtExpression.Text);
235             
string expText = this.txtExpression.Text;
236             IEvaluatable exp =
new Expression(expText);
237             
if (!exp.IsValid)
238             {
239                 
if (MessageBox.Show("Biểu thức bạn định thêm vào danh sách không hợp lệ! Bạn vẫn muốn thêm nó vào danh sách?", "", MessageBoxButtons.YesNo) == DialogResult.No)
240                     
return;
241             }
242             
this.lstExpressions.Items.Add(expText);
243             
this.txtExpression.Text = string.Empty;
244         }
245         
private string CompleteParenthesis(string exp)
246         {
247             
int leftBracket = 0;
248             
int rightBracket = 0;
249             
for (int i = 0; i < exp.Length; i++)
250             {
251                 
if (exp[i] == '(')
252                     leftBracket++;
253                 
else if (exp[i] == ')')
254                     rightBracket++;
255             }
256             exp = exp.PadRight(exp.Length + leftBracket - rightBracket,
')');
257             
return exp;
258         }
259
260         
#endregion
261
262         
#region Menu Area
263         
private void tácGiảToolStripMenuItem_Click(object sender, EventArgs e)
264         {
265             TacGia frmTacGia =
new TacGia();
266             frmTacGia.Show();
267         }
268
269
270
271         
private void absToolStripMenuItem_Click(object sender, EventArgs e)
272         {
273             txtExpression.Text +=
"abs(";
274         }
275
276         
private void sinToolStripMenuItem_Click(object sender, EventArgs e)
277         {
278             txtExpression.Text +=
"sin(";
279         }
280
281         
private void cosToolStripMenuItem_Click(object sender, EventArgs e)
282         {
283             txtExpression.Text +=
"cos(";
284         }
285
286         
private void tanToolStripMenuItem_Click(object sender, EventArgs e)
287         {
288             txtExpression.Text +=
"tan(";
289         }
290
291         
private void secToolStripMenuItem_Click(object sender, EventArgs e)
292         {
293             txtExpression.Text +=
"sec(";
294         }
295
296         
private void cosecToolStripMenuItem_Click(object sender, EventArgs e)
297         {
298             txtExpression.Text +=
"cosec(";
299         }
300
301         
private void cotToolStripMenuItem_Click(object sender, EventArgs e)
302         {
303             txtExpression.Text +=
"cot(";
304         }
305
306         
private void arcsinToolStripMenuItem_Click(object sender, EventArgs e)
307         {
308             txtExpression.Text +=
"arcsin(";
309         }
310
311         
private void arccosToolStripMenuItem_Click(object sender, EventArgs e)
312         {
313             txtExpression.Text +=
"arccos(";
314         }
315
316         
private void arctanToolStripMenuItem_Click(object sender, EventArgs e)
317         {
318             txtExpression.Text +=
"arctan(";
319         }
320
321         
private void expToolStripMenuItem_Click(object sender, EventArgs e)
322         {
323             txtExpression.Text +=
"exp(";
324         }
325
326         
private void lnToolStripMenuItem_Click(object sender, EventArgs e)
327         {
328             txtExpression.Text +=
"ln(";
329         }
330
331         
private void logToolStripMenuItem_Click(object sender, EventArgs e)
332         {
333             txtExpression.Text +=
"log(";
334         }
335
336         
private void antilogToolStripMenuItem_Click(object sender, EventArgs e)
337         {
338             txtExpression.Text +=
"antilog(";
339         }
340
341         
private void sqrtToolStripMenuItem_Click(object sender, EventArgs e)
342         {
343             txtExpression.Text +=
"sqrt(";
344         }
345
346         
private void sinhToolStripMenuItem_Click(object sender, EventArgs e)
347         {
348             txtExpression.Text +=
"sinh(";
349         }
350
351         
private void coshToolStripMenuItem_Click(object sender, EventArgs e)
352         {
353             txtExpression.Text +=
"cosh(";
354         }
355
356         
private void tanhToolStripMenuItem_Click(object sender, EventArgs e)
357         {
358             txtExpression.Text +=
"tanh(";
359         }
360
361         
private void arcsinhToolStripMenuItem_Click(object sender, EventArgs e)
362         {
363             txtExpression.Text +=
"arcsinh(";
364         }
365
366         
private void arccoshToolStripMenuItem_Click(object sender, EventArgs e)
367         {
368             txtExpression.Text +=
"arccosh(";
369         }
370
371         
private void arctanhToolStripMenuItem_Click(object sender, EventArgs e)
372         {
373             txtExpression.Text +=
"arctanh(";
374         }
375
376         
private void toolStripMenuItem2_Click(object sender, EventArgs e)
377         {
378             txtExpression.Text +=
"+";
379         }
380
381         
private void toolStripMenuItem3_Click(object sender, EventArgs e)
382         {
383             txtExpression.Text +=
"-";
384         }
385
386         
private void toolStripMenuItem4_Click(object sender, EventArgs e)
387         {
388             txtExpression.Text +=
"*";
389         }
390
391         
private void toolStripMenuItem5_Click(object sender, EventArgs e)
392         {
393             txtExpression.Text +=
"/";
394         }
395
396         
private void toolStripMenuItem6_Click(object sender, EventArgs e)
397         {
398             txtExpression.Text +=
"^";
399         }
400
401         
private void toolStripMenuItem7_Click(object sender, EventArgs e)
402         {
403             txtExpression.Text +=
"(";
404         }
405
406         
private void toolStripMenuItem8_Click(object sender, EventArgs e)
407         {
408             txtExpression.Text +=
")";
409         }
410         
#endregion
411     }
412 }



Phần mềm vẽ đồ thị C# 6.566 lượt xem

Gõ tìm kiếm nhanh...